package com.algorithm.递归;

/**
 * 编程实现把 A 的 n 个盘子移动到 C(盘子编号是 [1, n] )
 * 每次只能移动1个盘子
 * 大盘子只能放在小盘子下面
 */
public class 汉诺塔 {
    public static void main(String[] args) {
        new 汉诺塔().hanoi(10, "plateA", "plateB", "plateC");
    }


    public void hanoi(int n, String p1, String p2, String p3) {
        if (n == 1) {
            move(n, p1, p3);
            return;
        }
        hanoi(n - 1, p1, p3, p2);
        move(n, p1, p3);
        hanoi(n - 1, p2, p1, p3);
    }

    private void move(int no, String from, String to) {
        System.out.println("将" + no + "号盘子从" + from + "移到" + to);
    }
}
